package com.zh.business.vo.wechat;

import lombok.Data;
import lombok.experimental.Accessors;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * 描述: 订单查询返回结果
 *
 * @author: yanglin
 * @Date: 2021-08-18-13:50
 * @Version: 1.0
 */
@Data
@Accessors(chain = true)
@XmlRootElement(name = "xml")
@XmlAccessorType(value = XmlAccessType.FIELD)
public class OrderQueryRep {

    /**
     * 返回状态码
     * SUCCESS/FAIL
     * 此字段是通信标识，非交易标识，交易是否成功需要查看result_code来判断
     * Y
     */
    private String return_code;


    /**
     * 返回信息
     * 当return_code为FAIL时返回信息为错误原因 ，例如
     * 签名失败
     * 参数格式校验错误
     * Y
     */
    private String return_msg;

    /** 以下字段在return_code为SUCCESS的时候有返回 **/

    /**
     * 公众账号ID
     * 调用接口提交的公众账号ID
     * Y
     */
    private String appid;

    /**
     * 商户号
     * Y
     */
    private String mch_id;

    /**
     * 微信返回的随机字符串
     * Y
     */
    private String nonce_str;

    /**
     * 微信返回的签名值
     * Y
     */
    private String sign;

    /**
     * 业务结果
     * Y
     */
    private String result_code;

    /**
     * 错误代码
     * 当result_code为FAIL时返回错误代码，详细参见下文错误列表
     * N
     */
    private String err_code;

    /**
     * 错误代码描述
     * 当result_code为FAIL时返回错误描述，详细参见下文错误列表
     * N
     */
    private String err_code_des;

    /** 以下字段在return_code 、result_code、trade_state都为SUCCESS时有返回 ，如trade_state不为 SUCCESS，
     * 则只返回out_trade_no（必传）和attach（选传）。 **/

    /**
     * 设备号
     * N
     */
    private String device_info;

    /**
     * 用户标识
     * Y
     */
    private String openid;

    /**
     * 是否关注公众账号 Y-关注，N-未关注
     * Y
     */
    private String is_subscribe;

    /**
     * 交易类型
     * JSAPI -JSAPI支付
     * NATIVE -Native支付
     * APP -APP支付
     * Y
     */
    private String trade_type;

    /**
     * 交易状态
     * SUCCESS—支付成功
     * REFUND—转入退款
     * NOTPAY—未支付
     * CLOSED—已关闭
     * REVOKED—已撤销（付款码支付）
     * USERPAYING--用户支付中（付款码支付）
     * PAYERROR--支付失败(其他原因，如银行返回失败)
     * 支付状态机请见下单API页面
     * Y
     */
    private String trade_state;

    /**
     * 付款银行
     * 银行类型，采用字符串类型的银行标识
     * Y
     */
    private String bank_type;

    /**
     * 标价金额
     * 订单总金额，单位为分
     * Y
     */
    private Integer total_fee;

    /**
     * 应结订单金额
     * 当订单使用了免充值型优惠券后返回该参数，应结订单金额=订单金额-免充值优惠券金额。
     * N
     */
    private Integer settlement_total_fee;

    /**
     * 标价币种
     * 货币类型，符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
     * N
     */
    private String fee_type;

    /**
     * 现金支付金额
     * 现金支付金额订单现金支付金额，详见支付金额
     * Y
     */
    private Integer cash_fee;

    /**
     * 现金支付币种
     * 货币类型，符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
     * N
     */
    private String cash_fee_type;

    /**
     * 代金券金额
     * 代金券”金额<=订单金额，订单金额-“代金券”金额=现金支付金额，详见支付金额
     * N
     */
    private Integer coupon_fee;

    /**
     * 代金券使用数量
     * N
     */
    private Integer coupon_count;

    /**
     * 代金券类型
     * CASH--充值代金券
     * NO_CASH---非充值优惠券
     * 开通免充值券功能，并且订单使用了优惠券后有返回（取值：CASH、NO_CASH）。$n为下标,
     * 从0开始编号，举例：coupon_type_$0
     * N
     */
    private String coupon_type_$n;

    /**
     * 代金券ID
     * 代金券ID, $n为下标，从0开始编号
     * N
     */
    private String coupon_id_$n;

    /**
     * 单个代金券支付金额
     * $n为下标，从0开始编号
     * N
     */
    private Integer coupon_fee_$n;

    /**
     * 微信支付订单号
     * Y
     */
    private String transaction_id;

    /**
     * 商户订单号
     * Y
     */
    private String out_trade_no;

    /**
     * 附加数据 原样返回
     * N
     */
    private String attach;

    /**
     * 支付完成时间
     * 订单支付时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
     * Y
     */
    private String time_end;

    /**
     * 交易状态描述
     * 对当前查询订单状态的描述和下一步操作的指引
     * Y
     */
    private String trade_state_desc;

    /**
     * 错误码
     * ORDERNOTEXIST	此交易订单号不存在	查询系统中不存在此交易订单号	该API只能查提交支付交易返回成功的订单，
     * 请商户检查需要查询的订单号是否正确
     * SYSTEMERROR	系统错误	后台系统返回错误	系统异常，请再调用发起查询
     */


}
